<?php
namespace V1\Model;
/**
 * Description of newPHPClass
 *
 * @property   $name Description
 * 
 * @author wangzhenxian
 * @package application.components 
 */
use Think\Model;
class UserModel extends Model {
    
  protected $_validate = array(
        /*验证昵称*/
        array('nickname', '1,16', '昵称长度为1-16个字符', self::EXISTS_VALIDATE, 'length'),
        array('nickname', '', '昵称被占用', self::EXISTS_VALIDATE, 'unique'), //昵称被占用
        array('nickname', 'checkDenyMember', -2, self::EXISTS_VALIDATE, 'callback'), //昵称禁止注册
      
        /* 验证密码 */
        array('password', '32,64', -4, self::EXISTS_VALIDATE, 'length'), //密码长度不合法

        /* 验证手机号码 */
        array('phonenumber', '//', -9, self::EXISTS_VALIDATE), //手机格式不正确 TODO:
        array('phonenumber', 'checkDenyMobile', -10, self::EXISTS_VALIDATE, 'callback'), //手机禁止注册
        array('phonenumber', '', -11, self::EXISTS_VALIDATE, 'unique'), //手机号被占用
      
    );
  
    /* 用户模型自动完成 */
    protected $_auto = array(
            array('password', 'mt_data_md5', self::MODEL_BOTH, 'function', MT_AUTH_KEY),
            array('reg_time', NOW_TIME, self::MODEL_INSERT),
            array('reg_ip', 'get_client_ip', self::MODEL_INSERT, 'function', 1),
            array('avatar', '/Avatar/0.jpg'),
            array('update_time', NOW_TIME),
            array('status', '0'),
        );
    /**
     * 用户登录认证
     * @param  string  $username 用户名
     * @param  string  $password 用户密码
     * @return integer           登录成功-用户ID，登录失败-错误编号
     */
    public function login($phonenumber, $password){
            $map = array(
                'phonenumber'=>$phonenumber,
                'status' => 1,
            );
            /* 获取用户数据 */
            $fields=['id','nickname','password','phonenumber','avatar','money','experience'];
            $user = $this->where($map)->field($fields)->find();
       
            if(is_array($user)){
                /* 验证用户密码 */
                if(mt_data_md5($password, MT_AUTH_KEY) === $user['password']){
                        $this->updateLogin($user['id']); //更新用户登录信息
                        //!empty($user['avatar']) && $user['avatar']=$user['avatar'];
                        unset($user['password']);
                        return $user; //登录成功，返回用户ID
                } else {
                        return -2; //密码错误
                }
            } else {
                    return -1; //用户不存在或被禁用
            }
    }
    /**
    * 注册一个新用户
    * @param  string $password 用户密码
    * @param  string $phonenumber   用户手机号码
    * @return integer          注册成功-用户信息，注册失败-错误编号
    */
   public function register($phonenumber, $password='-&**&--&**&--&**&--&**&--&**&--&**&-'){
           $data = array(
                   'phonenumber' => $phonenumber,
                   'password' => $password,
                   'salt' =>  get_rand_char(),
           );
           /* 添加用户 */
           if($this->create($data)){
                   $uid = $this->add();
                   return $uid ? $uid : -1; //0-未知错误，大于0-注册成功
           } else {
                   return $this->getError(); //错误详情见自动验证注释
           }
   }    
    /**
      * 检测手机是不是被禁止注册
      * @param  string $mobile 手机
      * @return boolean        ture - 未禁用，false - 禁止注册
      */
    protected function checkDenyMobile($mobile){
            return true; //TODO: 暂不限制，下一个版本完善
    }
    /**
    * 检测用户昵称是不是被禁止注册
    * @param  string $username 用户名
    * @return boolean          ture - 未禁用，false - 禁止注册
    */
   protected function checkDenyMember($nickname){
           return true; //TODO: 暂不限制，下一个版本完善
   }
    /**
     * 验证用户密码
     * @param int $uid 用户id
     * @param string $password_in 密码
     * @return true 验证成功，false 验证失败
     * @author wzx <wzx@matidata.com>
    */
   protected function verifyUser($uid, $password_in){
           $password = $this->getFieldById($uid, 'password');
           if(mt_data_md5($password_in, MT_AUTH_KEY) === $password){
                   return true;
           }
           return false;
   }
  
   /**
    * 检测手机号是否被其他用户使用
    * @param  string  $phonenumber  手机号
    * @return integer  false 已经被其他用户占用 true 可以注册
    */
   public function checkPhoneNumber($phonenumber){
           $where = array('phonenumber'=>$phonenumber,'status' => '1');
           $result = $this->where($where)->count();
           return $result>0?false:true;
   }
   /**
    * 更新用户登录信息
    * @param  integer $uid 用户ID
    */
   protected function updateLogin($uid){
           $data = array(
                   'id'              => $uid,
                   'last_login_time' => NOW_TIME,
                   'last_login_ip'   => get_client_ip(1),
           );
           $this->save($data);
           $this->where("id={$uid}")->setInc('times');
   }
   /**
    * 更新用户信息
    * @param type $field 
    * @param type $uid 用户ID
    * @param type $type 1 密码 2 手机号 3 昵称 4 状态 5头像
    * @return int
    */
   public function updateFiled($field,$uid,$type=1){
           
        $data = array('id'=>$uid,);
        switch ($type) {
            case 1:
                    $data['password'] = mt_data_md5($field, MT_AUTH_KEY);
                    break;
            case 2:
                    $data['phonenumber'] = $field;
                    break;
            case 3:
                    $data['nickname'] = $field;
                    break;
            case 4:
                    $data['status'] = $field;
                    break;
            case 5:
                    $data['avatar'] = $field;
                    break;
            default:
                    return 0; //参数错误
        }
	return $this->save($data) ? 1 : $this->getError();
   }
   public function getUidByPhoneNumber($phonenumber){
        return $this->where(array('phonenumber'=>$phonenumber,'status'=>1))->getField('id');
    }
   
//   public function lists($status = 1, $order = 'uid DESC', $field = true){
//        $map = array('status' => $status);
//        return $this->field($field)->where($map)->order($order)->select();
//    }

//    /**
//     * 登录指定用户
//     * @param  integer $uid 用户ID
//     * @return boolean      ture-登录成功，false-登录失败
//     */
//    public function login($uid){
//        /* 检测是否在当前应用注册 */
//        $user = $this->field(true)->find($uid);
//        if(!$user || 1 != $user['status']) {
//            $this->error = '用户不存在或已被禁用！'; //应用级别禁用
//            return false;
//        }
//
//        //记录行为
//        action_log('admin_login', 'member', $uid, $uid);
//
//        /* 登录用户 */
//        $this->autoLogin($user);
//        return true;
//    }

//    /**
//     * 注销当前用户
//     * @return void
//     */
//    public function logout(){
//        session('user_auth', null);
//        session('user_auth_sign', null);
//    }
//    public function getNickName($uid){
//        return $this->where(array('uid'=>(int)$uid))->getField('nickname');
//    }
}
